حساس المسافة Ultrasonic
مقدمة
من المحتمل أنك قد شاهدت يوما ما ربوت لتجنب العوائق أو عصا لمساعدة المكفوفين
أو حتى جهاز لتعقيم اليدين يعمل تلقائياً عند الاقتراب منه.
هل فكرت ما هو الحساس المستخدم وما هي طريقة عمله؟ جميع ما ذكر من المشاريع
وأكثر بكثير يمكن عملها باستخدام حساس المسافة Ultrasonic SR-04.
ما هو حساس المسافة وما هي مكوناته
هو عبارة عن جهاز استشعار يقوم بقياس المسافة بينه وبين الحاجز الذي أمامه عن طريق الأمواج فوق الصوتية، يتكون من مرسل ومستقبل ودارة تحكم. يعتمد في عمله بشكل أساسي على الأمواج فوق الصوتية عن طريق ارسال موجة عن طريق المرسل ففي حال وجود حاجز تصطدم به الموجة وتنعكس الى المستقبل فيقوم الحساس بحساب الزمن الذي استغرقته الاشارة من لحظة ارسالها الى عودتها، وكما نعلم أن سرعة الصوت معروفة (340m/s عند درجة حرارة 20 درجة مئوية ) وتختلف بشكل بسيط عند تغير درجة الحرارة والرطوبة والضغط الجوي، وبالتالي يمكن حساب المسافة من خلال العلاقة التالية
Speed = dist/time
Dist = speed × time
مواصفات ومميزات الحساس
- جهد التغذية 5v.
- تيار الذي يستهلكه 15mA.
- أقل مسافة يستطيع قياسها 2cm.
- أكبر مسافة يستطيع قياسها 400cm.
- زاوية القياس 15deg درجة.
- دقة القياس 3mm.
تطبيقات ومشاريع باستخدام الحساس
- رادار صغير.
- حساس لقياس مستوى الماء.
- جهاز ذكي لتعقيم اليدين .
- سلة نفايات ذكية.
- عصا لمساعدة المكفوفين.
- كراج ذكي.
الربط مع الاردوينو
يحتوي الموديول على 4 أربعة أقطاب وهي:
Vcc
تغذية الموديول ب 5v
GND
قطب الارضي
Trigger
قطب التشغيل
Echo
قطب الدخل يتم من خلاله قياس الزمن
في البداية نحتاج لاعطاء نبضة موجبة زمنها 10us على القطب Trigger وهذه النبضة تعني بداية التشغيل فتقوم وحدة التحكم الموجود في الموديول بإرسال موجة فوق صوتية ترددها 40KHZ على شكل نبضات عددها 8 نبضات وعند نهاية ارسال هذه النبضات يبدأ قطب echo بقراءة نبضة موجبة High تستمر حتى تنعكس الموجة المرسلة وتعود الى المستقبل فتعود القيمة على قطب echo مساوية للصفر Low
مخطط التوصيل
الكود البرمجي
int trigPin = 3; // TRIG pin
int echoPin = 2; // ECHO pin
float duration_us,
distance_cm;
void setup() {
// begin serial port
Serial.begin (9600);
// configure the trigger pin to output mode
pinMode(trigPin, OUTPUT);
// configure the echo pin to input mode
pinMode(echoPin, INPUT);
}
void loop() {
// generate 10-microsecond pulse to TRIG pin
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// measure duration of pulse from ECHO pin
duration_us = pulseIn(echoPin, HIGH);
// calculate the distance
distance_cm = 0.034 * (duration_us / 2);
// print the value to Serial Monitor
Serial.print("distance: ");
Serial.print(distance_cm);
Serial.println(" cm");
delay(500);
}